home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1994 February: Tool Chest / Dev.CD Feb 94.toast / Tool Chest / Development Platforms / MPW Related / MPW Interfaces / PInterfaces / OSUtils.p < prev    next >
Encoding:
Text File  |  1993-09-17  |  11.9 KB  |  495 lines  |  [TEXT/MPS ]

  1. {
  2.     File:        OSUtils.p
  3.  
  4.     Copyright:    © 1983-1993 by Apple Computer, Inc.
  5.                 All rights reserved.
  6.  
  7.     Version:    System 7.1 for ETO #11
  8.     Created:    Tuesday, March 30, 1993 18:00
  9.  
  10. }
  11.  
  12. {$IFC UNDEFINED UsingIncludes}
  13. {$SETC UsingIncludes := 0}
  14. {$ENDC}
  15.  
  16. {$IFC NOT UsingIncludes}
  17.  UNIT OSUtils;
  18.  INTERFACE
  19. {$ENDC}
  20.  
  21. {$IFC UNDEFINED UsingOSUtils}
  22. {$SETC UsingOSUtils := 1}
  23.  
  24. {$I+}
  25. {$SETC OSUtilsIncludes := UsingIncludes}
  26. {$SETC UsingIncludes := 1}
  27. {$IFC UNDEFINED UsingTypes}
  28. {$I $$Shell(PInterfaces)Types.p}
  29. {$ENDC}
  30. {$SETC UsingIncludes := OSUtilsIncludes}
  31.  
  32. CONST
  33. useFree = 0;
  34. useATalk = 1;
  35. useAsync = 2;
  36. useExtClk = 3;                            {Externally clocked}
  37. useMIDI = 4;
  38.  
  39. {*** Environs Equates ***}
  40. curSysEnvVers = 2;                        {Updated to equal latest SysEnvirons version}
  41.  
  42. { Machine Types }
  43. envMac = -1;
  44. envXL = -2;
  45. envMachUnknown = 0;
  46. env512KE = 1;
  47. envMacPlus = 2;
  48. envSE = 3;
  49. envMacII = 4;
  50. envMacIIx = 5;
  51. envMacIIcx = 6;
  52. envSE30 = 7;
  53. envPortable = 8;
  54. envMacIIci = 9;
  55. envMacIIfx = 11;
  56.  
  57. { CPU types }
  58. envCPUUnknown = 0;
  59. env68000 = 1;
  60. env68010 = 2;
  61. env68020 = 3;
  62. env68030 = 4;
  63. env68040 = 5;
  64.  
  65. { Keyboard types }
  66. envUnknownKbd = 0;
  67. envMacKbd = 1;
  68. envMacAndPad = 2;
  69. envMacPlusKbd = 3;
  70. envAExtendKbd = 4;
  71. envStandADBKbd = 5;
  72. envPrtblADBKbd = 6;
  73. envPrtblISOKbd = 7;
  74. envStdISOADBKbd = 8;
  75. envExtISOADBKbd = 9;
  76. false32b = 0;                            {24 bit addressing error}
  77. true32b = 1;                            {32 bit addressing error}
  78.  
  79. { result types for RelString Call }
  80. sortsBefore = -1;                        {first string < second string}
  81. sortsEqual = 0;                            {first string = second string}
  82. sortsAfter = 1;                            {first string > second string}
  83.  
  84. { Toggle results }
  85. toggleUndefined = 0;
  86. toggleOK = 1;
  87. toggleBadField = 2;
  88. toggleBadDelta = 3;
  89. toggleBadChar = 4;
  90. toggleUnknown = 5;
  91. toggleBadNum = 6;
  92. toggleOutOfRange = 7;                    {synonym for toggleErr3}
  93. toggleErr3 = 7;
  94. toggleErr4 = 8;
  95. toggleErr5 = 9;
  96.  
  97. { Date equates }
  98. smallDateBit = 31;                        {Restrict valid date/time to range of Time global}
  99. togChar12HourBit = 30;                    {If toggling hour by char, accept hours 1..12 only}
  100. togCharZCycleBit = 29;                    {Modifier for togChar12HourBit: accept hours 0..11 only}
  101. togDelta12HourBit = 28;                    {If toggling hour up/down, restrict to 12-hour range (am/pm)}
  102. genCdevRangeBit = 27;                    {Restrict date/time to range used by genl CDEV}
  103. validDateFields = -1;
  104. maxDateField = 10;
  105. eraMask = $0001;
  106. yearMask = $0002;
  107. monthMask = $0004;
  108. dayMask = $0008;
  109. hourMask = $0010;
  110. minuteMask = $0020;
  111. secondMask = $0040;
  112. dayOfWeekMask = $0080;
  113. dayOfYearMask = $0100;
  114. weekOfYearMask = $0200;
  115. pmMask = $0400;
  116. dateStdMask = $007F;                    {default for ValidDate flags and ToggleDate TogglePB.togFlags}
  117.  
  118. TYPE
  119. LongDateField = (eraField,yearField,monthField,dayField,hourField,minuteField,
  120.  secondField,dayOfWeekField,dayOfYearField,weekOfYearField,pmField,res1Field,
  121.  res2Field,res3Field);
  122.  
  123. QTypes = (dummyType,vType,ioQType,drvQType,evType,fsQType,sIQType,dtQType);
  124.  
  125. TrapType = (OSTrap,ToolTrap);
  126.  
  127. ParamBlkType = (IOParam,FileParam,VolumeParam,CntrlParam,SlotDevParam,MultiDevParam,
  128.  AccessParam,ObjParam,CopyParam,WDParam,FIDParam,CSParam,ForeignPrivParam);
  129.  
  130.  
  131. SysPPtr = ^SysParmType;
  132. SysParmType = PACKED RECORD
  133.  valid: Byte;
  134.  aTalkA: Byte;
  135.  aTalkB: Byte;
  136.  config: Byte;
  137.  portA: INTEGER;
  138.  portB: INTEGER;
  139.  alarm: LONGINT;
  140.  font: INTEGER;
  141.  kbdPrint: INTEGER;
  142.  volClik: INTEGER;
  143.  misc: INTEGER;
  144.  END;
  145.  
  146. {QElemPtr = ^QElem;}
  147.  
  148. QElemPtr = ^QElem;
  149.  
  150. FInfo = RECORD
  151.  fdType: OSType;                        {the type of the file}
  152.  fdCreator: OSType;                        {file's creator}
  153.  fdFlags: INTEGER;                        {flags ex. hasbundle,invisible,locked, etc.}
  154.  fdLocation: Point;                        {file's location in folder}
  155.  fdFldr: INTEGER;                        {folder containing file}
  156.  END;
  157.  
  158. VCB = RECORD
  159.  qLink: QElemPtr;
  160.  qType: INTEGER;
  161.  vcbFlags: INTEGER;
  162.  vcbSigWord: INTEGER;
  163.  vcbCrDate: LONGINT;
  164.  vcbLsMod: LONGINT;
  165.  vcbAtrb: INTEGER;
  166.  vcbNmFls: INTEGER;
  167.  vcbVBMSt: INTEGER;
  168.  vcbAllocPtr: INTEGER;
  169.  vcbNmAlBlks: INTEGER;
  170.  vcbAlBlkSiz: LONGINT;
  171.  vcbClpSiz: LONGINT;
  172.  vcbAlBlSt: INTEGER;
  173.  vcbNxtCNID: LONGINT;
  174.  vcbFreeBks: INTEGER;
  175.  vcbVN: Str27;
  176.  vcbDrvNum: INTEGER;
  177.  vcbDRefNum: INTEGER;
  178.  vcbFSID: INTEGER;
  179.  vcbVRefNum: INTEGER;
  180.  vcbMAdr: Ptr;
  181.  vcbBufAdr: Ptr;
  182.  vcbMLen: INTEGER;
  183.  vcbDirIndex: INTEGER;
  184.  vcbDirBlk: INTEGER;
  185.  vcbVolBkUp: LONGINT;
  186.  vcbVSeqNum: INTEGER;
  187.  vcbWrCnt: LONGINT;
  188.  vcbXTClpSiz: LONGINT;
  189.  vcbCTClpSiz: LONGINT;
  190.  vcbNmRtDirs: INTEGER;
  191.  vcbFilCnt: LONGINT;
  192.  vcbDirCnt: LONGINT;
  193.  vcbFndrInfo: ARRAY [1..8] OF LONGINT;
  194.  vcbVCSize: INTEGER;
  195.  vcbVBMCSiz: INTEGER;
  196.  vcbCtlCSiz: INTEGER;
  197.  vcbXTAlBlks: INTEGER;
  198.  vcbCTAlBlks: INTEGER;
  199.  vcbXTRef: INTEGER;
  200.  vcbCTRef: INTEGER;
  201.  vcbCtlBuf: Ptr;
  202.  vcbDirIDM: LONGINT;
  203.  vcbOffsM: INTEGER;
  204.  END;
  205.  
  206. DrvQElPtr = ^DrvQEl;
  207. DrvQEl = RECORD
  208.  qLink: QElemPtr;
  209.  qType: INTEGER;
  210.  dQDrive: INTEGER;
  211.  dQRefNum: INTEGER;
  212.  dQFSID: INTEGER;
  213.  dQDrvSz: INTEGER;
  214.  dQDrvSz2: INTEGER;
  215.  END;
  216.  
  217. ParmBlkPtr = ^ParamBlockRec;
  218. ParamBlockRec = RECORD
  219.  qLink: QElemPtr;
  220.  qType: INTEGER;
  221.  ioTrap: INTEGER;
  222.  ioCmdAddr: Ptr;
  223.  ioCompletion: ProcPtr;
  224.  ioResult: OSErr;
  225.  ioNamePtr: StringPtr;
  226.  ioVRefNum: INTEGER;
  227.  CASE ParamBlkType OF
  228.    IOParam:
  229.   (ioRefNum: INTEGER;
  230.   ioVersNum: SignedByte;
  231.   ioPermssn: SignedByte;
  232.   ioMisc: Ptr;
  233.   ioBuffer: Ptr;
  234.   ioReqCount: LONGINT;
  235.   ioActCount: LONGINT;
  236.   ioPosMode: INTEGER;
  237.   ioPosOffset: LONGINT);
  238.    FileParam:
  239.   (ioFRefNum: INTEGER;
  240.   ioFVersNum: SignedByte;
  241.   filler1: SignedByte;
  242.   ioFDirIndex: INTEGER;
  243.   ioFlAttrib: SignedByte;
  244.   ioFlVersNum: SignedByte;
  245.   ioFlFndrInfo: FInfo;
  246.   ioFlNum: LONGINT;
  247.   ioFlStBlk: INTEGER;
  248.   ioFlLgLen: LONGINT;
  249.   ioFlPyLen: LONGINT;
  250.   ioFlRStBlk: INTEGER;
  251.   ioFlRLgLen: LONGINT;
  252.   ioFlRPyLen: LONGINT;
  253.   ioFlCrDat: LONGINT;
  254.   ioFlMdDat: LONGINT);
  255.    VolumeParam:
  256.   (filler2: LONGINT;
  257.   ioVolIndex: INTEGER;
  258.   ioVCrDate: LONGINT;
  259.   ioVLsBkUp: LONGINT;
  260.   ioVAtrb: INTEGER;
  261.   ioVNmFls: INTEGER;
  262.   ioVDirSt: INTEGER;
  263.   ioVBlLn: INTEGER;
  264.   ioVNmAlBlks: INTEGER;
  265.   ioVAlBlkSiz: LONGINT;
  266.   ioVClpSiz: LONGINT;
  267.   ioAlBlSt: INTEGER;
  268.   ioVNxtFNum: LONGINT;
  269.   ioVFrBlk: INTEGER);
  270.    CntrlParam:
  271.   (ioCRefNum: INTEGER;
  272.   csCode: INTEGER;
  273.   csParam: ARRAY [0..10] OF INTEGER);
  274.    SlotDevParam:
  275.   (filler3: LONGINT;
  276.   ioMix: Ptr;
  277.   ioFlags: INTEGER;
  278.   ioSlot: SignedByte;
  279.   ioID: SignedByte);
  280.    MultiDevParam:
  281.   (filler4: LONGINT;
  282.   ioMMix: Ptr;
  283.   ioMFlags: INTEGER;
  284.   ioSEBlkPtr: Ptr);
  285.  END;
  286.  
  287. EvQElPtr = ^EvQEl;
  288. EvQEl = RECORD
  289.  qLink: QElemPtr;
  290.  qType: INTEGER;
  291.  evtQWhat: INTEGER;                        {this part is identical to the EventRecord as...}
  292.  evtQMessage: LONGINT;                    {defined in ToolIntf}
  293.  evtQWhen: LONGINT;
  294.  evtQWhere: Point;
  295.  evtQModifiers: INTEGER;
  296.  END;
  297.  
  298. VBLTask = RECORD
  299.  qLink: QElemPtr;
  300.  qType: INTEGER;
  301.  vblAddr: ProcPtr;
  302.  vblCount: INTEGER;
  303.  vblPhase: INTEGER;
  304.  END;
  305.  
  306. DeferredTask = RECORD
  307.  qLink: QElemPtr;                        {next queue entry}
  308.  qType: INTEGER;                        {queue type}
  309.  dtFlags: INTEGER;                        {reserved}
  310.  dtAddr: ProcPtr;                        {pointer to task}
  311.  dtParm: LONGINT;                        {optional parameter}
  312.  dtReserved: LONGINT;                    {reserved--should be 0}
  313.  END;
  314.  
  315. QElem = RECORD
  316.  CASE QTypes OF
  317.    dtQType:
  318.   (dtQElem: DeferredTask);                {deferred}
  319.    vType:
  320.   (vblQElem: VBLTask);                    {vertical blanking}
  321.    ioQType:
  322.   (ioQElem: ParamBlockRec);                {I/O parameter block}
  323.    drvQType:
  324.   (drvQElem: DrvQEl);                    {drive}
  325.    evType:
  326.   (evQElem: EvQEl);                        {event}
  327.    fsQType:
  328.   (vcbQElem: VCB);                        {volume control block}
  329.  END;
  330.  
  331. QHdrPtr = ^QHdr;
  332. QHdr = RECORD
  333.  qFlags: INTEGER;
  334.  qHead: QElemPtr;
  335.  qTail: QElemPtr;
  336.  END;
  337.  
  338. SysEnvRec = RECORD
  339.  environsVersion: INTEGER;
  340.  machineType: INTEGER;
  341.  systemVersion: INTEGER;
  342.  processor: INTEGER;
  343.  hasFPU: BOOLEAN;
  344.  hasColorQD: BOOLEAN;
  345.  keyBoardType: INTEGER;
  346.  atDrvrVersNum: INTEGER;
  347.  sysVRefNum: INTEGER;
  348.  END;
  349.  
  350. MachineLocation = RECORD
  351.  latitude: Fract;
  352.  longitude: Fract;
  353.  CASE INTEGER OF
  354.    0:
  355.   (dlsDelta: SignedByte);                 {signed byte; daylight savings delta}
  356.    1:
  357.   (gmtDelta: LONGINT);                    {must mask - see documentation}
  358.  END;
  359.  
  360. DateTimeRec = RECORD
  361.  year: INTEGER;
  362.  month: INTEGER;
  363.  day: INTEGER;
  364.  hour: INTEGER;
  365.  minute: INTEGER;
  366.  second: INTEGER;
  367.  dayOfWeek: INTEGER;
  368.  END;
  369.  
  370.  
  371. LongDateTime = comp;
  372.  
  373. LongDateCvt = RECORD
  374.  CASE INTEGER OF
  375.    0:
  376.   (c: Comp);
  377.    1:
  378.   (lHigh: LONGINT;
  379.   lLow: LONGINT);
  380.  END;
  381.  
  382. LongDateRec = RECORD
  383.  CASE INTEGER OF
  384.    0:
  385.   (era: INTEGER;
  386.   year: INTEGER;
  387.   month: INTEGER;
  388.   day: INTEGER;
  389.   hour: INTEGER;
  390.   minute: INTEGER;
  391.   second: INTEGER;
  392.   dayOfWeek: INTEGER;
  393.   dayOfYear: INTEGER;
  394.   weekOfYear: INTEGER;
  395.   pm: INTEGER;
  396.   res1: INTEGER;
  397.   res2: INTEGER;
  398.   res3: INTEGER);
  399.    1:
  400.   (list: ARRAY [0..13] OF INTEGER);        {Index by LongDateField!}
  401.    2:
  402.   (eraAlt: INTEGER;
  403.   oldDate: DateTimeRec);
  404.  END;
  405.  
  406.  
  407. DateDelta = SignedByte;
  408.  
  409. TogglePB = RECORD
  410.  togFlags: LONGINT;                        {caller normally sets low word to dateStdMask=$7F}
  411.  amChars: ResType;                        {from 'itl0', but uppercased}
  412.  pmChars: ResType;                        {from 'itl0', but uppercased}
  413.  reserved: ARRAY [0..3] OF LONGINT;
  414.  END;
  415.  
  416.  
  417. ToggleResults = INTEGER;
  418.  
  419. PROCEDURE LongDateToSeconds(lDate: LongDateRec;VAR lSecs: LongDateTime);
  420.  INLINE $2F3C,$8008,$FFF2,$A8B5;
  421. PROCEDURE LongDate2Secs(lDate: LongDateRec;VAR lSecs: LongDateTime);
  422.  INLINE $2F3C,$8008,$FFF2,$A8B5;
  423. PROCEDURE LongSecondsToDate(VAR lSecs: LongDateTime;VAR lDate: LongDateRec);
  424.  INLINE $2F3C,$8008,$FFF0,$A8B5;
  425. PROCEDURE LongSecs2Date(VAR lSecs: LongDateTime;VAR lDate: LongDateRec);
  426.  INLINE $2F3C,$8008,$FFF0,$A8B5;
  427. FUNCTION ToggleDate(VAR lSecs: LongDateTime;field: LongDateField;delta: DateDelta;
  428.  ch: INTEGER;params: TogglePB): ToggleResults;
  429.  INLINE $2F3C,$820E,$FFEE,$A8B5;
  430. FUNCTION ValidDate(vDate: LongDateRec;flags: LONGINT;VAR newSecs: LongDateTime): INTEGER;
  431.  INLINE $2F3C,$820C,$FFE4,$A8B5;
  432. FUNCTION IsMetric: BOOLEAN;
  433.  INLINE $3F3C,$0004,$A9ED;
  434. FUNCTION IUMetric: BOOLEAN;
  435.  INLINE $3F3C,$0004,$A9ED;
  436. FUNCTION ReadDateTime(VAR time: LONGINT): OSErr;
  437. PROCEDURE GetDateTime(VAR secs: LONGINT);
  438. FUNCTION SetDateTime(time: LONGINT): OSErr;
  439. PROCEDURE SetTime(d: DateTimeRec);
  440. PROCEDURE GetTime(VAR d: DateTimeRec);
  441. PROCEDURE DateToSeconds(d: DateTimeRec;VAR secs: LONGINT);
  442. PROCEDURE Date2Secs(d: DateTimeRec;VAR secs: LONGINT);
  443. PROCEDURE SecondsToDate(secs: LONGINT;VAR d: DateTimeRec);
  444. PROCEDURE Secs2Date(secs: LONGINT;VAR d: DateTimeRec);
  445. FUNCTION GetSysPPtr: SysPPtr;
  446.  INLINE $2EBC,$0000,$01F8;
  447. PROCEDURE SysBeep(duration: INTEGER);
  448.  INLINE $A9C8;
  449. FUNCTION DTInstall(dtTaskPtr: QElemPtr): OSErr;
  450. FUNCTION GetMMUMode: SignedByte;
  451. PROCEDURE SwapMMUMode(VAR mode: SignedByte);
  452. FUNCTION SysEnvirons(versionRequested: INTEGER;VAR theWorld: SysEnvRec): OSErr;
  453. PROCEDURE Delay(numTicks: LONGINT;VAR finalTicks: LONGINT);
  454. FUNCTION GetTrapAddress(trapNum: INTEGER): LONGINT;
  455. PROCEDURE SetTrapAddress(trapAddr: LONGINT;trapNum: INTEGER);
  456. FUNCTION NGetTrapAddress(trapNum: INTEGER;tTyp: TrapType): LONGINT;
  457. PROCEDURE NSetTrapAddress(trapAddr: LONGINT;trapNum: INTEGER;tTyp: TrapType);
  458. FUNCTION GetOSTrapAddress(trapNum: INTEGER): LONGINT;
  459. PROCEDURE SetOSTrapAddress(trapAddr: LONGINT;trapNum: INTEGER);
  460. FUNCTION GetToolTrapAddress(trapNum: INTEGER): LONGINT;
  461. PROCEDURE SetToolTrapAddress(trapAddr: LONGINT;trapNum: INTEGER);
  462. FUNCTION GetToolboxTrapAddress(trapNum: INTEGER): LONGINT;
  463. PROCEDURE SetToolboxTrapAddress(trapAddr: LONGINT;trapNum: INTEGER);
  464. FUNCTION WriteParam: OSErr;
  465. PROCEDURE Enqueue(qElement: QElemPtr;qHeader: QHdrPtr);
  466. FUNCTION Dequeue(qElement: QElemPtr;qHeader: QHdrPtr): OSErr;
  467. FUNCTION SetCurrentA5: LONGINT;
  468.  INLINE $2E8D,$2A78,$0904;
  469. FUNCTION SetA5(newA5: LONGINT): LONGINT;
  470.  INLINE $2F4D,$0004,$2A5F;
  471. PROCEDURE Environs(VAR rom: INTEGER;VAR machine: INTEGER);
  472. FUNCTION HandToHand(VAR theHndl: Handle): OSErr;
  473. FUNCTION PtrToXHand(srcPtr: Ptr;dstHndl: Handle;size: LONGINT): OSErr;
  474. FUNCTION PtrToHand(srcPtr: Ptr;VAR dstHndl: Handle;size: LONGINT): OSErr;
  475. FUNCTION HandAndHand(hand1: Handle;hand2: Handle): OSErr;
  476. FUNCTION PtrAndHand(ptr1: Ptr;hand2: Handle;size: LONGINT): OSErr;
  477. FUNCTION InitUtil: OSErr;
  478.  INLINE $A03F,$3E80;
  479. FUNCTION SwapInstructionCache(cacheEnable: BOOLEAN): BOOLEAN;
  480. PROCEDURE FlushInstructionCache;
  481. FUNCTION SwapDataCache(cacheEnable: BOOLEAN): BOOLEAN;
  482. PROCEDURE FlushDataCache;
  483. PROCEDURE ReadLocation(VAR loc: MachineLocation);
  484.  INLINE $205F,$203C,$000C,$00E4,$A051;
  485. PROCEDURE WriteLocation(loc: MachineLocation);
  486.  INLINE $205F,$203C,$000C,$00E4,$A052;
  487.  
  488.  
  489. {$ENDC} { UsingOSUtils }
  490.  
  491. {$IFC NOT UsingIncludes}
  492.  END.
  493. {$ENDC}
  494.  
  495.